//package com.inspur.edp.udt.generator.api.typeprocessers.datareaders;
//
//
//import com.inspur.edp.caf.generator.BaseGenerator;
//import com.inspur.edp.caf.generator.composite.CompositeGenerator;
//import com.inspur.edp.caf.generator.composite.CompositeGeneratorContext;
//import com.inspur.edp.cef.designtime.api.IGspCommonField;
//import com.inspur.edp.cef.designtime.api.element.GspElementDataType;
//import com.inspur.edp.cef.designtime.api.element.GspElementObjectType;
//import com.inspur.edp.udt.designtime.api.entity.ComplexDataTypeDef;
//import com.inspur.edp.udt.designtime.api.entity.SimpleDataTypeDef;
//import com.inspur.edp.udt.designtime.api.entity.dbInfo.ColumnMapType;
//import com.inspur.edp.udt.designtime.api.entity.element.UdtElement;
//import com.inspur.edp.udt.generator.api.UdtApiGenCtx;
//
//import static com.inspur.edp.cef.designtime.api.element.GspElementDataType.*;
//import static com.inspur.edp.cef.designtime.api.element.GspElementObjectType.*;
//import static com.inspur.edp.udt.designtime.api.entity.dbInfo.ColumnMapType.*;
//
//public class DataReadersGenerator extends CompositeGenerator
//{
//	private UdtApiGenCtx apiGenCtx;
//	public DataReadersGenerator(UdtApiGenCtx apiGenCtx)
//	{
//		super();
//		this.apiGenCtx = apiGenCtx;
//	}
////C# TO JAVA CONVERTER WARNING: There is no Java equivalent to C#'s shadowing via the 'new' keyword:
////ORIGINAL LINE: private new DataReadersGenCtx Context => (DataReadersGenCtx)((super.Context instanceof DataReadersGenCtx) ? super.Context : null);
//	private DataReadersGenCtx getDataReaderGenContext(){return (DataReadersGenCtx)((super.getContext() instanceof DataReadersGenCtx) ? super.getContext(): null);}
//	@Override
//	protected CompositeGeneratorContext createCompositeContext()
//	{
//		return new DataReadersGenCtx(apiGenCtx);
//	}
//
//	@Override
//	protected java.util.ArrayList<BaseGenerator> createCompositeItemGenerators()
//	{
//		java.util.ArrayList<BaseGenerator> list = new java.util.ArrayList<BaseGenerator>();
//		if (apiGenCtx.getUdtGenContext().getUdt() instanceof SimpleDataTypeDef)
//		{
//			AddSimpleUdtTypeProcessorGenertors(list, (SimpleDataTypeDef)((apiGenCtx.getUdtGenContext().getUdt()  instanceof SimpleDataTypeDef) ? apiGenCtx.getUdtGenContext().getUdt()  : null));
//		}
//		else
//		{
//			AddCompositeUdtTypeProcessGenerators(list, (ComplexDataTypeDef)((apiGenCtx.getUdtGenContext().getUdt()  instanceof ComplexDataTypeDef) ? apiGenCtx.getUdtGenContext().getUdt()  : null));
//		}
//		return list;
//	}
//
//	private void AddSimpleUdtTypeProcessorGenertors(java.util.ArrayList<BaseGenerator> list, SimpleDataTypeDef simpleUdt)
//	{
//		switch (simpleUdt.getObjectType())
//		{
//			case None:
//				CreateNormalDataReader(simpleUdt.getCode() + "DataReader", list, simpleUdt.getContainElements().get(0).getLabelID(), (UdtElement)(( simpleUdt.getContainElements().get(0) instanceof UdtElement) ?  simpleUdt.getContainElements().get(0) : null));
//				break;
//			case Association:
//				CreateAssDataReader(simpleUdt.getCode() + "DataReader", list, simpleUdt.getContainElements().get(0).getLabelID(), (UdtElement)(( simpleUdt.getContainElements().get(0) instanceof UdtElement) ?  simpleUdt.getContainElements().get(0) : null));
//				break;
//			case Enum:
//				CreateEnumDataReader(simpleUdt.getCode() + "DataReader", list, simpleUdt.getContainElements().get(0).getLabelID(), (UdtElement)(( simpleUdt.getContainElements().get(0) instanceof UdtElement) ?  simpleUdt.getContainElements().get(0) : null));
//				break;
//		}
//	}
//
//	private void CreateNormalDataReader(String className, java.util.ArrayList<BaseGenerator> list, String readerColumnName, UdtElement element)
//	{
//		String readerMethodName = "";
//
//		switch (element.getMDataType())
//		{
//			case String:
//				readerMethodName = "ConvertVarcharToString";
//				break;
//			case Binary:
//				readerMethodName = "ConvertBytesToBinary";
//				break;
//			case Boolean:
//				readerMethodName = "ConvertVarcharToBool";
//				break;
//			case Date:
//				readerMethodName = "ConvertDateToDateTime";
//				break;
//			case DateTime:
//				readerMethodName = "ConvertDateToDateTime";
//				break;
//			case Decimal:
//				readerMethodName = "ConvertDecimalToDecimal";
//				break;
//			case Integer:
//				readerMethodName = "ConvertIntToInt";
//				break;
//			case Text:
//				readerMethodName = "ConvertTextToString";
//				break;
//			default:
//				throw new IllegalStateException("Unexpected value: " + element.getMDataType());
//		}
//
//		UdtDataReaderReadDataMethodGenerator methodGenerator = new DbPropertyConvertorsReadDataGenerator(apiGenCtx.getUdtGenContext(), element.getLabelID(), readerColumnName, readerMethodName);
//		list.add(new UdtDataReaderGenerator(className, getDataReaderGenContext(), apiGenCtx, element.getLabelID(), methodGenerator));
//	}
//
//	private void CreateAssDataReader(String className, java.util.ArrayList<BaseGenerator> list, String readerColumnName, UdtElement element)
//	{
//		java.util.HashMap<String, String> mapping = GetAssPropertyMapping(element);
//		UdtAssociationReadDataGenerator methodGenerator = new UdtAssociationReadDataGenerator(apiGenCtx.getUdtGenContext(), element.getLabelID(), mapping, element);
//		list.add(new UdtDataReaderGenerator(className, getDataReaderGenContext(), apiGenCtx, element.getLabelID(), methodGenerator));
//	}
//
//	private java.util.HashMap<String, String> GetAssPropertyMapping(UdtElement element)
//	{
//		java.util.HashMap<String, String> mapping = new java.util.HashMap<String, String>();
//		mapping.put(element.getLabelID(), element.getLabelID());
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//		for (IGspCommonField item : element.getChildAssociations().get(0).getRefElementCollection())
//		{
//			//TODO: 此处临时处理暂时不支持非字符串字段, 这样导致取数的时候带不出其他类型的关联字段值
//			if ((item.getMDataType() != String && item.getMDataType() != Text) || item.getIsUdt()|| item.getObjectType ()!= GspElementObjectType.None)
//			{
//				continue;
//			}
//			mapping.put(item.getLabelID(), item.getLabelID());
//		}
//		return mapping;
//	}
//
//	private void CreateEnumDataReader(String className, java.util.ArrayList<BaseGenerator> list, String readerColumnName, UdtElement element)
//	{
//		UdtEnumReadDataGenerator methodGenerator = new UdtEnumReadDataGenerator(apiGenCtx.getUdtGenContext(), element.getLabelID(), readerColumnName, element);
//		list.add(new UdtDataReaderGenerator(className, getDataReaderGenContext(), apiGenCtx, element.getLabelID(), methodGenerator));
//	}
//
//	private void AddCompositeUdtTypeProcessGenerators(java.util.ArrayList<BaseGenerator> list, ComplexDataTypeDef complexUdt)
//	{
//		switch (complexUdt.getDbInfo().getMappingType())
//		{
//			case SingleColumn:
//				GetSingleColumns(list, complexUdt);
//				break;
//			case MultiColumns:
//				GetMultiColumns(list, complexUdt);
//				break;
//			default:
//				break;
//		}
//
//	}
//
//	private void GetSingleColumns(java.util.ArrayList<BaseGenerator> list, ComplexDataTypeDef complexUdt)
//	{
//		//TODO
//		DefaultMultiColumnsReadDataGenerator converterMethodGen = new DefaultMultiColumnsReadDataGenerator(apiGenCtx.getUdtGenContext(), complexUdt.getCode());
//		list.add(new UdtDataReaderGenerator(complexUdt.getCode() + "DataReader", getDataReaderGenContext(), apiGenCtx, complexUdt.getCode(), converterMethodGen));
//	}
//
//	private void GetMultiColumns(java.util.ArrayList<BaseGenerator> list, ComplexDataTypeDef complexUdt)
//	{
//		for (IGspCommonField item : complexUdt.getContainElements())
//		{
//
//			if (item.getIsUdt())
//			{
//				CreateUdtElementDataReader((UdtElement) item, complexUdt, list);
//			}
//			else
//			{
//				switch (item.getObjectType())
//				{
//					case None:
//						CreateNormalDataReader(java.lang.String.format("{0}{1}{2}", complexUdt.getCode(), item.getLabelID(), "DataReader"), list, item.getLabelID(), (UdtElement) item);
//						break;
//					case Association:
//						CreateAssDataReader(java.lang.String.format("{0}{1}{2}", complexUdt.getCode(), item.getLabelID(), "DataReader"), list, item.getLabelID(), (UdtElement) item);
//						break;
//					case Enum:
//						CreateEnumDataReader(java.lang.String.format("{0}{1}{2}", complexUdt.getCode(), item.getLabelID(), "DataReader"), list, item.getLabelID(), (UdtElement) item);
//						break;
//					default:
//						throw new UnsupportedOperationException();
//				}
//			}
//		}
//	}
//
////
////
////
//	private void CreateUdtElementDataReader(UdtElement item, ComplexDataTypeDef complexUdt, java.util.ArrayList<BaseGenerator> list)
//	{
//		//throw new NotImplementedException();
//	}
//}